Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[VAULTS] Polish Permissions contract and other minor improvements #935

Draft
wants to merge 16 commits into
base: feat/vaults
Choose a base branch
from

Conversation

failingtwice
Copy link
Contributor

This PR includes minor improvements to Permissions, some refactoring and improvements

Copy link

github-actions bot commented Jan 30, 2025

badge

Hardhat Unit Tests Coverage Summary

Filename                                                       Stmts    Miss  Cover    Missing
-----------------------------------------------------------  -------  ------  -------  ------------------------------------------------------------------------------
contracts/0.4.24/Lido.sol                                        201       6  97.01%   741, 746, 787-789, 946-947
contracts/0.4.24/StETH.sol                                        79       0  100.00%
contracts/0.4.24/StETHPermit.sol                                  15       0  100.00%
contracts/0.4.24/lib/Packed64x4.sol                                5       0  100.00%
contracts/0.4.24/lib/SigningKeys.sol                              36       0  100.00%
contracts/0.4.24/lib/StakeLimitUtils.sol                          37       0  100.00%
contracts/0.4.24/nos/NodeOperatorsRegistry.sol                   512       0  100.00%
contracts/0.4.24/oracle/LegacyOracle.sol                          72       0  100.00%
contracts/0.4.24/utils/Pausable.sol                                9       0  100.00%
contracts/0.4.24/utils/Versioned.sol                               5       0  100.00%
contracts/0.6.12/WstETH.sol                                       17       0  100.00%
contracts/0.8.25/Accounting.sol                                   90       5  94.44%   117-120, 346, 372
contracts/0.8.25/interfaces/IDepositContract.sol                   0       0  100.00%
contracts/0.8.25/interfaces/ILido.sol                              0       0  100.00%
contracts/0.8.25/interfaces/IOracleReportSanityChecker.sol         0       0  100.00%
contracts/0.8.25/interfaces/IPostTokenRebaseReceiver.sol           0       0  100.00%
contracts/0.8.25/interfaces/IStakingRouter.sol                     0       0  100.00%
contracts/0.8.25/interfaces/IWithdrawalQueue.sol                   0       0  100.00%
contracts/0.8.25/utils/AccessControlVoteable.sol                  29       0  100.00%
contracts/0.8.25/utils/PausableUntilWithRoles.sol                  3       0  100.00%
contracts/0.8.25/vaults/Dashboard.sol                             84       0  100.00%
contracts/0.8.25/vaults/Delegation.sol                            39       0  100.00%
contracts/0.8.25/vaults/Permissions.sol                           32       6  81.25%   126-142
contracts/0.8.25/vaults/StakingVault.sol                         101       0  100.00%
contracts/0.8.25/vaults/VaultFactory.sol                          32       0  100.00%
contracts/0.8.25/vaults/VaultHub.sol                             144     102  29.17%   111-124, 180-269, 284-350, 382-431, 443-451, 457-487, 501
contracts/0.8.25/vaults/interfaces/IStakingVault.sol               0       0  100.00%
contracts/0.8.4/WithdrawalsManagerProxy.sol                       61       0  100.00%
contracts/0.8.9/BeaconChainDepositor.sol                          21       2  90.48%   48, 51
contracts/0.8.9/Burner.sol                                        72       0  100.00%
contracts/0.8.9/DepositSecurityModule.sol                        128       0  100.00%
contracts/0.8.9/EIP712StETH.sol                                   16       0  100.00%
contracts/0.8.9/LidoExecutionLayerRewardsVault.sol                16       0  100.00%
contracts/0.8.9/LidoLocator.sol                                   20       0  100.00%
contracts/0.8.9/OracleDaemonConfig.sol                            28       0  100.00%
contracts/0.8.9/StakingRouter.sol                                316       0  100.00%
contracts/0.8.9/WithdrawalQueue.sol                               88       0  100.00%
contracts/0.8.9/WithdrawalQueueBase.sol                          146       0  100.00%
contracts/0.8.9/WithdrawalQueueERC721.sol                         89       0  100.00%
contracts/0.8.9/WithdrawalVault.sol                               21       0  100.00%
contracts/0.8.9/lib/Math.sol                                       4       0  100.00%
contracts/0.8.9/lib/PositiveTokenRebaseLimiter.sol                22      22  0.00%    88-172
contracts/0.8.9/lib/UnstructuredRefStorage.sol                     2       0  100.00%
contracts/0.8.9/oracle/AccountingOracle.sol                      190       2  98.95%   154-155
contracts/0.8.9/oracle/BaseOracle.sol                             89       1  98.88%   397
contracts/0.8.9/oracle/HashConsensus.sol                         263       1  99.62%   1005
contracts/0.8.9/oracle/ValidatorsExitBusOracle.sol                91      91  0.00%    96-461
contracts/0.8.9/proxy/OssifiableProxy.sol                         17       0  100.00%
contracts/0.8.9/sanity_checks/OracleReportSanityChecker.sol      218      56  74.31%   195, 232, 273-324, 413-441, 495-507, 558-561, 569, 578, 586, 697, 702-747, 802
contracts/0.8.9/utils/DummyEmptyContract.sol                       0       0  100.00%
contracts/0.8.9/utils/PausableUntil.sol                           31       0  100.00%
contracts/0.8.9/utils/Versioned.sol                               11       0  100.00%
contracts/0.8.9/utils/access/AccessControl.sol                    23       0  100.00%
contracts/0.8.9/utils/access/AccessControlEnumerable.sol           9       0  100.00%
contracts/common/utils/PausableUntil.sol                          29       1  96.55%   33
contracts/testnets/sepolia/SepoliaDepositAdapter.sol              21      21  0.00%    49-100
TOTAL                                                           3584     316  91.18%

Diff against master

Filename                                                       Stmts    Miss  Cover
-----------------------------------------------------------  -------  ------  --------
contracts/0.4.24/Lido.sol                                        -11      +6  -2.99%
contracts/0.4.24/StETH.sol                                        +7       0  +100.00%
contracts/0.8.25/Accounting.sol                                  +90      +5  +94.44%
contracts/0.8.25/interfaces/IDepositContract.sol                   0       0  +100.00%
contracts/0.8.25/interfaces/ILido.sol                              0       0  +100.00%
contracts/0.8.25/interfaces/IOracleReportSanityChecker.sol         0       0  +100.00%
contracts/0.8.25/interfaces/IPostTokenRebaseReceiver.sol           0       0  +100.00%
contracts/0.8.25/interfaces/IStakingRouter.sol                     0       0  +100.00%
contracts/0.8.25/interfaces/IWithdrawalQueue.sol                   0       0  +100.00%
contracts/0.8.25/utils/AccessControlVoteable.sol                 +29       0  +100.00%
contracts/0.8.25/utils/PausableUntilWithRoles.sol                 +3       0  +100.00%
contracts/0.8.25/vaults/Dashboard.sol                            +84       0  +100.00%
contracts/0.8.25/vaults/Delegation.sol                           +39       0  +100.00%
contracts/0.8.25/vaults/Permissions.sol                          +32      +6  +81.25%
contracts/0.8.25/vaults/StakingVault.sol                        +101       0  +100.00%
contracts/0.8.25/vaults/VaultFactory.sol                         +32       0  +100.00%
contracts/0.8.25/vaults/VaultHub.sol                            +144    +102  +29.17%
contracts/0.8.25/vaults/interfaces/IStakingVault.sol               0       0  +100.00%
contracts/0.8.9/Burner.sol                                        +1       0  +100.00%
contracts/0.8.9/LidoLocator.sol                                   +2       0  +100.00%
contracts/0.8.9/lib/PositiveTokenRebaseLimiter.sol                 0     +22  -100.00%
contracts/0.8.9/sanity_checks/OracleReportSanityChecker.sol      -14     +56  -25.69%
contracts/common/utils/PausableUntil.sol                         +29      +1  +96.55%
TOTAL                                                           +568    +198  -4.91%

Results for commit: fdb7a08

Minimum allowed coverage is 90%

♻️ This comment has been updated with latest results

Copy link
Contributor

@TheDZhon TheDZhon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👀

* @notice The order of confirmations does not matter
*
*/
modifier onlyMutuallyConfirmed(bytes32[] memory _roles) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's check for the empty _roles

Comment on lines 22 to 27
mapping(bytes32 callId => mapping(bytes32 role => uint256 timestamp)) public confirmations;

/**
* @notice Confirmation lifetime in seconds; after this period, the confirmation expires and no longer counts.
*/
uint256 public confirmLifetime;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should it be non-linear storage though?

* - role: role that confirmed the action
* - timestamp: timestamp of the confirmation.
*/
mapping(bytes32 callId => mapping(bytes32 role => uint256 timestamp)) public confirmations;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we add some getters to make it more accessible?

* the confirmation is considered expired, no longer counts and must be recasted for the confirmation to go through.
* @param _newConfirmLifetime The new confirmation lifetime in seconds.
*/
function _setConfirmLifetime(uint256 _newConfirmLifetime) internal {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ there is a vuln with retroactive increase

can track the last confirmation timestamp and revert this function if new conf precedes it

@@ -97,18 +89,18 @@ contract Dashboard is Permissions {
/**
* @notice Initializes the contract with the default admin role
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

outdated comment (doesn't mention the second parameter)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

treasuryFee -> treasuryFeeBP and maybe other similar cases

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wrong comment:


    /**
     * @notice Withdraws stETH tokens from the staking vault to wrapped ether.
     * @param _recipient Address of the recipient
     * @param _amountOfWETH Amount of WETH to withdraw
     */
    function withdrawWETH(address _recipient, uint256 _amountOfWETH) external {
        _withdraw(address(this), _amountOfWETH);
        WETH.deposit{value: _amountOfWETH}();
        SafeERC20.safeTransfer(WETH, _recipient, _amountOfWETH);
    }

have similar issues for other utility functions here and there

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

plz consider revamping comment sections


/**
* @notice Mass-grants multiple roles to multiple accounts.
* @param _assignments An array of role assignments.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe note that duplicates wouldn't revert the call rather resulting in fewer events emitted (and cover this behavior with tests)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe prohibit zero address for NodeOperator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants